from operator import attrgetter

class User(object):
    def __init__(self,id,name,age):
        self.id = id
        self.name = name
        self.age = age
    

    def __repr__(self):
        return f'User({self.id},{self.name},{self.age})'


users = [User(1,'RickyLi',18) , User(2,'ShionTang',20) ,User(3,'KikiWang',24),User(4,'Jim',26)]

# 通过lambda 表达式，来获取User的一个属性，根据这个属性来进行排序
s1_users = sorted(users,key = lambda u : u.name)
print('s1','=',s1_users)

# 通过 operator 提供的 attrgetter 来获取User的一个属性，根据该属性来进行排序
s2_users = sorted(users,key = attrgetter('age'))
print('s2','=',s2_users)

# 同样的对于min 和 max 也适用
print(min(users,key=attrgetter('id')))
print(max(users,key=attrgetter('id')))